package cn.xqj.system.service.impl;

import cn.xqj.org.domain.Department;
import cn.xqj.system.domain.Menu;
import cn.xqj.system.mapper.MenuMapper;
import cn.xqj.system.service.IMenuService;
import cn.xqj.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 业务实现类：
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {

    @Autowired
    private MenuMapper menuMapper;

    @Override
    public List<Menu> getMenuTree() {
        // 查询所有菜单信息
        List<Menu> allMenu = menuMapper.findAll();
        // 创建map集合
        Map<Long, Menu> map = new HashMap<>();
        // 循环遍历所有菜单信息，将所有菜单存入map中（菜单id=当前菜单对象）
        for (Menu menu : allMenu) {
            map.put(menu.getId(),menu);
        }

        // 准备返回给前端的菜单树集合
        List<Menu> menuTree = new ArrayList<>();

        // 再次循环遍历所有菜单
        for (Menu menu : allMenu) {
            // 如果当前菜单没有父菜单id -- Parent_id
            if (menu.getParent_id() == null) {
                // 就把当前菜单存进返回给前端的菜单树集合中（因为没有父id 所以全是顶级菜单）
                menuTree.add(menu);
            } else { // 剩下的全是除开顶级菜单的菜单
                // 获取当前菜单的父菜单id -- parent_id
                Long parent_id = menu.getParent_id();
                // 再通过父菜单id去map集合中查找当前菜单的父菜单
                Menu parentMenu = map.get(parent_id);
                // 再把当前菜单存进父菜单的children属性中（children是一个list集合）
                parentMenu.getChildren().add(menu);
            }
        }
        return menuTree;


    }
}
